/*
 * ProdutoAS.java
 * 
 * Created on 04/10/2007, 07:48:21
 * 
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package tcc.applicationService.Produto;

import java.util.List;
import javax.persistence.EntityTransaction;
import tcc.applicationService.AbstractAS;
import tcc.dao.produto.ProdutoDao;
import tcc.domain.produto.Produto;
import tcc.exception.system.TccASException;
import tcc.exception.system.TccSystemException;
import tcc.util.PersistenceUtil;

public class ProdutoAS extends AbstractAS{

    /** Creates a new instance of ComponenteAS */
    private ProdutoAS() {
    }
    private static ProdutoAS instance;
    
     public static synchronized ProdutoAS getInstance() {
        if (instance == null) {
            instance = new ProdutoAS();
        }
        return instance;
    }
     
      public void salvarProduto(Produto c) throws TccSystemException {

        EntityTransaction tx = PersistenceUtil.getInstance().getTransaction();

        try {
            tx.begin();
            new ProdutoDao().save(c);
            tx.commit();
        } catch (Exception ex) {
            tx.rollback();
            throw new TccSystemException(ex);
        }
    }
    public void removerProduto(Produto c) throws TccASException {
        
        EntityTransaction tx = PersistenceUtil.getInstance().getTransaction();
        
        try {
            tx.begin();
            new ProdutoDao().delete(c);
            tx.commit();
        } catch (Exception ex) {
            tx.rollback();
            throw new TccASException(ex);
        }
    }

    public List<Produto> listarProduto() throws TccASException {
        ProdutoDao dao = new ProdutoDao();
        return dao.findAll();
    }

    public Produto buscarPorId(Long Id) throws TccASException {
        try {
            return new ProdutoDao().findById(Id);
        } catch (Exception ex) {
            throw new TccASException(ex);
        }
    }
}